package com.example.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import android.util.Log;

import com.google.android.gms.maps.model.LatLng;

public class Util {

	
	/**
	 * Metodo que arma la Url para la obtencion de datos de rutas entre 2 puntos.
	 * @param origen
	 * @param destino
	 * @return
	 * Cadena Url Google Maps Api Routes entre 2 puntos
	 */
	public static String crearDireccionUrlGoogleMapsApiRutas(LatLng origen,LatLng destino){
		// Punto de origen
		String strOrigen = "origin="+origen.latitude+","+origen.longitude;
		// Punto de destino
		String strDestino = "destination="+destino.latitude+","+destino.longitude;		
		// Sensor
		String estadoHabilitacionSensor = "sensor=false";
		// Habilitacion de alternativas de rutas
		String estadoHabilitacionAlternativas = "alternatives=true";
					
		// Armando la cadena de parametros para la Url a mandar al Web Service de Google Maps
		String parameters = strOrigen+"&"+strDestino+"&"+estadoHabilitacionSensor+"&"+estadoHabilitacionAlternativas;
		// Formato de salida
		String output = "json";
		// Armando la Url a mandar al Web Service
		String url = "https://maps.googleapis.com/maps/api/directions/"+output+"?"+parameters;
		
		return url;
	}
	
	
	/**
	 * Metodo que establece la conexion y descarga los datos JSON desde la URL a manera de cadena.
	 * @param strUrl
	 * @return
	 * @throws IOException
	 */
    public static String downloadUrl(String strUrl) throws IOException{
        String strDatos = "";
        InputStream inputStream = null;
        HttpURLConnection urlConnection = null;
        try{
                URL url = new URL(strUrl);

                // Abriendo una conexion HTTP con la Url recibida
                urlConnection = (HttpURLConnection) url.openConnection();

                // Conectando a la Url 
                urlConnection.connect();

                // Obtenelos los datos devueltos en la conexion 
                inputStream = urlConnection.getInputStream();

                BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));

                StringBuffer sb  = new StringBuffer();

                String linea = "";
                while((linea=br.readLine())!=null){
                        sb.append(linea);
                }
                
                strDatos = sb.toString();
                br.close();
        }catch(Exception e){
                Log.d("Exception while downloading url", e.toString());
        }finally{
        		inputStream.close();
                urlConnection.disconnect();
        }
        return strDatos;
     }
    
    public static List<List<String>> crearListaDeListaDeDireccionesUrls(List<LatLng> ubicaciones){
    	
    	List<List<String>> urls = new ArrayList<List<String>>();
    	List<String> listaUrlsFila = new ArrayList<String>();
    	String url = null;
    	
    	for(LatLng origen : ubicaciones){
    		listaUrlsFila = new ArrayList<String>();
    		for(LatLng destino : ubicaciones){
    			url = crearDireccionUrlGoogleMapsApiRutas(origen, destino);
    			listaUrlsFila.add(url);
    		}
    		urls.add(listaUrlsFila);
    	}
    	
    	
    	return urls;
    	
    }
    
	
}//Fin de clase
